package top.lshaci.learning.pdfqr;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * PdfQrLoad
 *
 * @author lshaci
 * @version 1.0.3
 * @since 1.0.3
 */
public class PdfQrLoad {

    /**
     * PdfQrLoad类用于加载PDF文件，并与PdfQrData和PdfQrContent类协同工作
     * 它提供了一系列方法来从不同的来源（如InputStream、File、String路径）加载PDF文件
     */
    private final PdfQrData data;
    /**
     * 存储QR码的相关数据
     */
    private final PdfQrContent qrContent;

    /**
     * 构造函数，初始化PdfQrLoad对象
     *
     * @param data PdfQrData对象，包含QR码的数据信息
     */
    PdfQrLoad(PdfQrData data) {
        this.data = data;
        this.qrContent = new PdfQrContent(data);
    }

    /**
     * 从InputStream加载PDF文件
     *
     * @param pdfIs PDF文件的InputStream
     * @return 返回PdfQrContent对象，用于进一步处理或获取内容
     */
    public PdfQrContent pdf(InputStream pdfIs) {
        data.pdf = pdfIs;
        return qrContent;
    }

    /**
     * 从字节数组加载PDF文件
     *
     * @param pdfBytes PDF文件的字节数组
     * @return 返回PdfQrContent对象，用于进一步处理或获取内容
     */
    public PdfQrContent pdf(byte[] pdfBytes) {
        data.pdf = new ByteArrayInputStream(pdfBytes);
        return qrContent;
    }

    /**
     * 从File对象加载PDF文件
     *
     * @param pdfFile PDF文件的File对象
     * @return 返回PdfQrContent对象，用于进一步处理或获取内容
     * @throws IOException 如果文件读取过程中发生错误
     */
    public PdfQrContent pdf(File pdfFile) throws IOException {
        data.pdf = Files.newInputStream(pdfFile.toPath());
        return qrContent;
    }

    /**
     * 通过文件路径加载PDF文件
     *
     * @param pdfFilePath PDF文件的路径
     * @return 返回PdfQrContent对象，用于进一步处理或获取内容
     * @throws IOException 如果文件读取过程中发生错误
     */
    public PdfQrContent pdf(String pdfFilePath) throws IOException {
        data.pdf = Files.newInputStream(Paths.get(pdfFilePath));
        return qrContent;
    }

}
